import { ref } from "vue";
import { defineStore } from "pinia";
import { apiBaseUrl } from "../../utils/config";
import { dbGet } from "../../utils/db";
export const useSocketStore = defineStore("socket", () => {
    const socketUrl = `ws://${apiBaseUrl}/ws/chat/`;
    const isclose = ref(false);
    const reconnections = ref(0);
    const start = () => {
        // 如果已连接，关闭重新连接
        uni.onSocketOpen(() => {
            isclose.value = true;
        });
        if (isclose.value) {
            uni.closeSocket();
            // uni.onSocketClose(() => {
            //     clearInterval(heartbeatInterval.value);
            //     heartbeatInterval.value = null;
            //     console.log("已经连接中的Socket关闭成功");
            // });
        }
        // 获取token省略，自行请求接口并赋值，这里只是快速演示如何：创建一个 WebSocket 连接
        const token = dbGet("X-TOKEN");
        if (token) {
            const url = `${socketUrl}?token=${token}`;
            uni.connectSocket({ url });
        } else {
            console.log("未获取到token");
        }

        // 监听 WebSocket 连接打开事件
        uni.onSocketOpen(() => {
            console.log("新创建的Socket连接成功");
        });
        // 监听WebSocket错误。
        uni.onSocketError(() => {
            reconnections.value += 1;
            if (reconnections.value <= 3) {
                console.log(`连接失败，正在尝试第${reconnections.value}次连接`);
                start();
            } else {
                console.error("已尝试3次重新连接均未成功");
            }
        });
    

        // 监听socket接受到服务器的消息事件
        uni.onSocketMessage((res) => {
            const getData = JSON.parse(res.data);
            // 通过uni.$emit触发全局的自定义事件，并在页面中通过uni.$on接收数据
            if (getData.event == "event_talk") {
                uni.$emit("getMsg", getData.content); // 更新消息内容
                uni.$emit("getList", getData.content); // 更新消息列表
            }
        });
    };
    return { start };
});
